package com.cloud.flowable.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cloud.flowable.entity.WfDeployForm;
import com.cloud.flowable.entity.bo.ProcessPage;
import com.cloud.entity.vo.TaskParam;
import com.cloud.flowable.entity.vo.WfDefinitionVo;
import com.cloud.flowable.entity.vo.WfDetailVo;
import com.cloud.flowable.entity.vo.WfTaskVo;

import java.util.List;

public interface IWfProcessService {

    /**
     * 查询可发起流程列表
     *
     * @return
     */
    Page<WfDefinitionVo> selectStartProcessPage(ProcessPage procPage);

    /**
     * 查询可发起流程列表
     */
    List<WfDefinitionVo> selectStartProcessList(ProcessPage procPage);

    /**
     * 查询我的流程列表
     */
    Page<WfTaskVo> selectOwnProcessPage(ProcessPage procPage);

    /**
     * 查询我的流程列表
     */
    List<WfTaskVo> selectOwnProcessList(ProcessPage procPage);

    /**
     * 查询代办任务列表
     */
    Page<WfTaskVo> selectTodoProcessPage(ProcessPage procPage);

    /**
     * 查询代办任务列表
     */
    List<WfTaskVo> selectTodoProcessList(ProcessPage procPage);

    /**
     * 查询待签任务列表
     */
    Page<WfTaskVo> selectClaimProcessPage(ProcessPage procPage);

    /**
     * 查询待签任务列表
     */
    List<WfTaskVo> selectClaimProcessList(ProcessPage procPage);

    /**
     * 查询已办任务列表
     */
    Page<WfTaskVo> selectFinishedProcessPage(ProcessPage procPage);

    /**
     * 查询已办任务列表
     */
    List<WfTaskVo> selectFinishedProcessList(ProcessPage procPage);

    /**
     * 查询流程部署关联表单信息
     *
     * @param definitionId 流程定义ID
     * @param deployId     部署ID
     */
    public WfDeployForm selectFormContent(String definitionId, String deployId);

    /**
     * 启动流程实例
     */
    void startProcByDefId(TaskParam taskParam);

    /**
     * 根据流程标识,启动流程实例
     */
    String startProcByDefKey(TaskParam taskParam);

    /**
     * 删除流程实例
     */
    void deleteProcessByIds(List<String> instanceIds);

    /**
     * 读取xml文件
     *
     * @param procDefId 流程定义ID
     */
    String queryBpmnXmlById(String procDefId);

    /**
     * 查询流程任务详情信息
     *
     * @param procInsId 流程实例ID
     * @param taskId    任务ID
     */
    WfDetailVo queryProcessDetail(String procInsId, String taskId);
}
